/*
 ============================================================================
 Name        : ChatFifo.c
 Author      : Francesco Corvino
 Version     :
 Copyright   : Copyright 2012 by Corvino Francesco. All rights reserved. This material may not be duplicated for any profit-driven enterprise.
 Description : Hello World in C, Ansi-style
 ============================================================================
 */

#include <stdio.h>
#include <stdlib.h>
#include "interfacefifo.h"
#include "procedures.h"

int main(int argc, char* argv[]) {
	InterfaceFifo infifo, outfifo;
	char buffer[BUFSIZ+1];

	char pathToListner[255], pathToDir[255];
	if(argc>2)	{
		strcpy(pathToDir,argv[1]);
		sprintf(pathToListner,"%s/%s",argv[1],argv[2]);
	} else { // presente nella cartella locale
		strcpy(pathToDir,".");
		strcpy(pathToListner,"./listener.fifo");
	}

	sprintf(infifo.name,"%s/%d-%s",pathToDir, getpid(),"out.fifo");
	sprintf(outfifo.name,"%s/%d-%s",pathToDir, getpid(),"in.fifo");

	puts("--- Fifo terminal ---\n");

	startProc(); // avvia il processo principale se non attivo

	// comunica con il processo principale di aggiungere la sua sessione
	regTerminal(pathToListner);

	// inizializza i file per comunicare con il processo principale
	startCommunication(&infifo, &outfifo);

	puts("--- Digitare per interagire ---\n");

	int status = 1;
	while(status){
		switch(_Chat_waitInput(STDIN_FILENO,infifo.pipefd)){
			case 0:
			    memset(buffer, '\0', sizeof(buffer));
				fgets(buffer, BUFSIZ, stdin);
				InterfaceFifo_sendMsg(&outfifo,buffer);
				puts("---------------- Messaggio inviato -----------------\n");
				break;
			case 1:
			    memset(buffer, '\0', sizeof(buffer));
				InterfaceFifo_rcvMsg(&infifo,buffer,BUFSIZ);
				printf("%s",buffer);
				break;
			default:
				printf("nessuno è pronto");
				status = 0;
				break;
		}
		if(strncmp(buffer,"end",3)==0) status = 0;

	}

	InterfaceFifo_closeComm(&infifo);
	InterfaceFifo_closeComm(&outfifo);
	return EXIT_SUCCESS;
}
